// 这个文件专门去二次封装axios
import axios from "axios";
import Nprogress from "nprogress";
import "nprogress/nprogress.css"; //引入他的样式文件

// 想要二次封装axios增加的功能
// 配置基础路径和超时限制
// 添加进度条信息  nprogress
// 返回的响应不再需要从data属性当中拿数据，而是响应就是我们要的数据
// 统一处理请求错误

// 创建了一个ajax是axios的实例化对象 之前怎么玩axios 现在就可以怎么玩ajax
const ajax = axios.create({
  baseURL: "/api", //基础路径
  timeout: 10000, //超时时间 单位是毫秒值
});

// 添加请求拦截器
ajax.interceptors.request.use(function (config) {
  // 发送请求成功执行的回调函数
  // config是请求所有信息所组成的一个对象 (请求报文)
  // 开启进度条
  Nprogress.start();
  return config;
});

// 添加响应拦截器
ajax.interceptors.response.use(
  function (response) {
    // 响应成功执行的回调函数
    // response是响应所有信息所组成的一个对象 (响应报文)
    // 统一返回数据
    // 关闭进度条
    Nprogress.done();
    return response.data;
  },
  function (error) {
    // 响应失败执行的回调函数
    // 统一处理处理
    // 关闭进度条
    Nprogress.done();
    if (error.response.status == 401) {
      alert("未授权");
    } else if (error.response.status == 403) {
      alert("禁止访问");
    } else if (error.response.status == 404) {
      alert("错误访问");
    } else if (error.response.status == 500) {
      alert("服务器出错了");
    }
    return new Promise(() => {}); //返回一个pending的promise 中断promise链
  }
);

export default ajax;
